package com.redis.service.impl;

import com.redis.config.JedisUtils;
import com.redis.pojo.User;
import com.redis.service.UserService;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author:ChenZhangKun
 * @Date: 2020/8/2 18:34
 */
@Service
@Log
public class UserServiceImpl implements UserService {
    String value;
    @Autowired
    private JedisPool jedisPool; // jedis连接池
    @Autowired
    private JedisUtils jedisUtils;
    @Override
    public String getString(String key) {
        // redis中有什么命令，jedis就有什么方法
        // 得到连接信息
        Jedis jedis = jedisPool.getResource();
        // 是否存在
        Boolean exists = jedis.exists(key);
        if (exists){
            log.info("查询redis数据库");
            value=jedis.get(key);
        }else {
            //
            log.info("查询数据库数据");
            // 先做假数据
            value="czk";
            jedis.set(key,value);

        }
        // 关闭连接
        jedis.close();
        return value;
    }

    @Override
    public void putKey(String key) {
        // 拿到jedis
        Jedis jedis = jedisUtils.getJedis();
        // 设置key
        jedis.set(key,"25");
        // 设置超时时间
        jedis.expire(key,10);
        log.info("设置key超时时间为10s");
    }

    @Override
    public User getUser(int key) {
        User user=new User();
        // 得到jedis
        Jedis jedis = jedisUtils.getJedis();
        // key是否存在
        Boolean exists = jedis.exists("user:"+key);
        if (exists){
            log.info("从redis中取数据");
            // 存在
            Map<String, String> map = jedis.hgetAll("user:"+key);
            // 赋值
            user.setAge(Integer.parseInt(map.get("age")));
            // 名字
            user.setName(map.get("name"));
            // 年龄
            user.setAge(Integer.parseInt(map.get("age")));
        }else {
            // 不存在
            // 创建假user
            log.info("从数据库中取数据");
            user=new User(key,"czk",26);
            // 存入redis中
            Map<String,String> map=new HashMap<>(16);
            map.put("id",key+"");
            map.put("name",user.getName());
            map.put("age",user.getAge()+"");
            log.info("存入redis数据库");
            jedis.hmset("user:"+key,map);
        }
        return user;
    }
}
